/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import modelo.Rubro;

/**
 *
 * @author Cristian Perez
 */
public class RubrosDao {
    private static RubrosDao instance = null;

    public RubrosDao() {
        //Instanciacion de Singleton
    }

    public static RubrosDao getInstance() {
        if (instance == null) {
            instance = new RubrosDao();
        }
        return instance;
    }

     public void insertar(Connection c, Rubro r) throws SQLException {
        PreparedStatement pstmt = null;
        try {
            String query = "INSERT INTO rubros (nombre) VALUES (?)";
            pstmt = c.prepareStatement(query);
            pstmt.setString(1, r.getNombre().toUpperCase().trim());
            pstmt.execute();
        }catch(Exception e) {e.printStackTrace();}
        finally {
            try {pstmt.close();} catch(Exception ee) {}
        }
    }

     public void modificar(Connection c, Rubro r) throws SQLException {
        PreparedStatement pstmt = null;
        try {
            String query = "UPDATE rubros SET nombre= ? WHERE idRubro='"+r.getCod()+"'";
            pstmt = c.prepareStatement(query);
            pstmt.setString(1, r.getNombre());
            pstmt.execute();
        }catch(Exception e) {e.printStackTrace();}
        finally {
            try {
                pstmt.close();
            }catch(Exception em) {}
        }
    }

      public void eliminar(Connection c, Rubro rub) throws SQLException {
        Statement stmt = null;
        try {
        String query = "DELETE FROM rubros WHERE idRubro='"+rub.getCod()+"'";
        stmt = c.createStatement();
        stmt.execute(query);
        }catch(Exception e) {e.printStackTrace();}
        finally {
            try {stmt.close();} catch(Exception ee) {}
        }
    }

    public ArrayList getTodos (Connection c) throws SQLException {
        //Creo la variable lista donde la consulta me va a devolver los registros
        ArrayList lista = new ArrayList();
        Statement stmtConsulta = null;

        //Creo la consulta
            String laConsulta = "SELECT * FROM rubros";
            //Creo la sentencia
            stmtConsulta = c.createStatement();
            //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
            ResultSet rs = stmtConsulta.executeQuery(laConsulta);

            //Cargo la lista
            while (rs.next()) {
                Rubro rubAux = new Rubro(rs.getInt("idRubro"),rs.getString("nombre"));
                lista.add(rubAux);
            }
            stmtConsulta.close();
            //Retorno la lista
            return lista;
    }

    public boolean verificarExistenciaRubro (Connection c, int codRubro) throws SQLException {
        Statement stmtConsulta = null;

        //Pido todos los usuarios que esten asociados al rubro "codRubro"
        String laConsulta = "SELECT * FROM articulos WHERE idRubro='"+codRubro+"'";
        //Creo la sentencia
        stmtConsulta = c.createStatement();
        //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
        ResultSet rs = stmtConsulta.executeQuery(laConsulta);

        if (rs.next()) {
            stmtConsulta.close();
            return true;
        }else {
            stmtConsulta.close();
            return false;
        }
    }

    public Rubro getRubroXcodigo (Connection c, int cod) throws SQLException {
        Statement stmtConsulta = null;
        Rubro rubAux = null;
        //Creo la consulta
        String laConsulta = "SELECT idRubro, nombre FROM rubros WHERE idRubro='"+cod+"'";
        //Creo la sentencia
        stmtConsulta = c.createStatement();
        //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
        ResultSet rs = stmtConsulta.executeQuery(laConsulta);

        if (rs.next()) {
            rubAux = new Rubro(rs.getInt("idRubro"),rs.getString("nombre"));
        }else {
            System.out.println("El codigo no pertence a ningun rubro");
        }
        stmtConsulta.close();
        return rubAux;
    }

}
